﻿Imports UtilPadrao
Imports Controle
Public Class UCEndereco

    Private iCodLogradouro As Int32
    Private objCidade As New ctrCidade
    Private objLogradouro As New ctrLogradouro
    Private objUF As New ctrUF
    Private bPreenchendoEnd As Boolean = False

    Private bCarregarCombo As Boolean = True

    Public Property CodLogradouro As Int32
        Get
            Return Me.iCodLogradouro
        End Get
        Set(value As Int32)
            Me.iCodLogradouro = value
            Me.preencherEndereco(String.Empty, String.Empty, Me.iCodLogradouro)
        End Set
    End Property

#Region "Métodos"

    Private Sub limparCamposEndereco(ByVal bLimparCampoRua As Boolean)
        If bLimparCampoRua Then
            Me.iCodLogradouro = 0
            txtTpLogradouro.Text = String.Empty
            txtLogradouro.Text = String.Empty
        End If
        txtBairro.Text = String.Empty
        txtCep.Text = String.Empty
    End Sub

    Public Sub listarCidade(ByVal iEstado As Int32)

        Dim datCidadeFiltro As New DataTable
        Dim iCodCapital As Int32 = 0

        Try

            If iEstado > 0 Then

                bPreenchendoEnd = True
                datCidadeFiltro = objCidade.selecionaCidadePorEstado(iEstado)
                iCodCapital = objCidade.retornarCodCapitalEstado(iEstado)

                If datCidadeFiltro.Rows.Count = 0 Then

                    MessageBox.Show("Estado não possui Cidades cadastrados",
                                    Me.Text,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation)
                    Me.cmbCidade.DataSource = Nothing
                    Me.cmbEstado.SelectedValue = iEstado
                    Me.cmbEstado.Focus()

                Else
                    Me.cmbCidade.DataSource = datCidadeFiltro
                    Me.cmbCidade.DisplayMember = "descCidade"
                    Me.cmbCidade.ValueMember = "codCidade"
                    Me.cmbCidade.SelectedValue = iCodCapital
                End If

                bPreenchendoEnd = False

            End If

        Catch ex As Exception
            ' Informa ao usuário a inconsistência das informações.
            MessageBox.Show(ex.Message,
                            "Informações - Erro ao Listar Cidades.",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Error)


        End Try

    End Sub

    Private Sub listarEstado()
        Dim datEstado As New DataTable

        Try
            ' Lista os Estados disponíveis.
            datEstado = Me.objUF.selecionaDadosEstado(0)

            If datEstado.Rows.Count > 0 Then
                Me.cmbEstado.DataSource = datEstado
                Me.cmbEstado.DisplayMember = "sigla"
                Me.cmbEstado.ValueMember = "codEstado"
                Me.listarCidade(0)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message,
                            "Informações - Erro ao Listar Estados.",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub preencherEndereco(ByVal sCep As String, ByVal sLogradouro As String, ByVal iCodLogradouro As Int32)
        Dim objCep As New ctrCep
        Dim objLogradouro As New ctrLogradouro
        Dim drEndereco As DataRow = Nothing
        Dim dtbEnderecos As DataTable
        Dim objAuxiliar As Object
        Dim iCodCidade As Int32


        Try

            If Not String.IsNullOrEmpty(sCep.Replace("-", "")) Then

                drEndereco = objCep.selecionarEnderecoPorCep(sCep)

                If IsNothing(drEndereco) Then

                    MessageBox.Show("Cep não localizado.", "Atenção", MessageBoxButtons.OK)

                    Uteis.limpaCampos(Me)

                    Me.txtCep.Focus()
                    Exit Sub
                End If

            ElseIf Not String.IsNullOrWhiteSpace(sLogradouro) Then
                iCodCidade = Me.cmbCidade.SelectedValue
                objLogradouro = New ctrLogradouro
                dtbEnderecos = objLogradouro.selecionarEnderecoPorLogradouro(sLogradouro, iCodCidade)

                If dtbEnderecos.Rows.Count = 1 Then
                    drEndereco = dtbEnderecos.Rows(0)

                ElseIf dtbEnderecos.Rows.Count > 1 Then

                    objAuxiliar = FronteiraPadrao.frmPesquisa.executarPesquisaGenerica("Selecionar Endereços",
                                                                                        objLogradouro.sCamposTabela,
                                                                                        objLogradouro.sCamposDemonstracao,
                                                                                        objLogradouro.sCamposChave,
                                                                                        objLogradouro.sTitulosColunas,
                                                                                        dtbEnderecos)
                    If Not Verificador.seVazio(objAuxiliar) Then
                        Me.iCodLogradouro = conversao.toInt32(objAuxiliar(0))
                        drEndereco = objLogradouro.selecionarLogradouro(Me.CodLogradouro)
                    Else
                        Uteis.limpaCampos(Me)
                        Exit Sub
                    End If

                Else
                    MessageBox.Show("Logradouro não localizado.", "Atenção", MessageBoxButtons.OK)
                    Me.limparCamposEndereco(True)
                    Exit Sub
                End If
            ElseIf Me.CodLogradouro > 0 Then
                objLogradouro = New ctrLogradouro
                drEndereco = objLogradouro.selecionarLogradouro(Me.CodLogradouro)
            Else
                Uteis.limpaCampos(Me)
                Exit Sub
            End If

            If Not IsNothing(drEndereco) Then
                With drEndereco
                    bPreenchendoEnd = True
                    Me.cmbEstado.SelectedValue = conversao.nuloParaZero(.Item("coduf"))
                    Me.listarCidade(Me.cmbEstado.SelectedValue)

                    Me.cmbCidade.SelectedValue = conversao.nuloParaZero(.Item("codcidade"))
                    Me.txtCep.Text = Formatacao.formatCep(conversao.nuloParaVazio(.Item("cep")))
                    Me.iCodLogradouro = conversao.nuloParaZero(.Item("codLogradouro"))
                    Me.txtTpLogradouro.Text = conversao.nuloParaVazio(.Item("descTipo"))
                    Me.txtLogradouro.Text = conversao.nuloParaVazio(.Item("logradouro"))
                    Me.txtBairro.Text = conversao.nuloParaVazio(.Item("bairro"))
                    bPreenchendoEnd = False
                    Me.txtNumero.Focus()

                End With
            End If


        Catch ex As Exception
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub UCEndereco_Load(sender As Object, e As System.EventArgs) Handles Me.Load

        If bCarregarCombo And PersistenciaPadrao.AcessoBD.sStringConexao <> String.Empty Then
            bCarregarCombo = False

            Me.listarEstado()
        End If

    End Sub

    Private Sub cmbEstado_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbEstado.DropDownClosed
        Me.listarCidade(Me.cmbEstado.SelectedValue)
    End Sub

    Private Sub cmbCidade_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbCidade.SelectedValueChanged

        If Not bPreenchendoEnd Then
            Me.limparCamposEndereco(True)
        End If

    End Sub

    Private Sub txtLogradouro_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtLogradouro.KeyDown
        If e.KeyCode = Keys.Return Then
            Me.preencherEndereco(String.Empty, Me.txtLogradouro.Text, 0)
        End If

    End Sub

    Private Sub txtCep_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtCep.KeyDown

        If e.KeyCode = Keys.Return Then
            Me.preencherEndereco(Me.txtCep.Text, Me.txtLogradouro.Text, 0)
        End If

    End Sub

    Private Sub btnExcluirEndereco_Click(sender As System.Object, e As System.EventArgs) Handles btnExcluirEndereco.Click

        Me.CodLogradouro = 0

    End Sub

    Private Sub lblImgCorreios_Click(sender As System.Object, e As System.EventArgs) Handles lblImgCorreios.Click

        Dim processo As New System.Diagnostics.Process
        With processo
            .StartInfo.FileName = "http://www.buscacep.correios.com.br/servicos/dnec/menuAction.do?Metodo=menuEndereco"
            .Start()
        End With

    End Sub

#End Region

End Class
